home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 142 / Gekkan Dennou Club - 2000.3 Vol. 142 (Japan).7z / Gekkan Dennou Club - 2000.3 Vol. 142 (Japan) (Track 1).bin / imelo / cmscc / hdge_j80.c < prev    next >
C/C++ Source or Header  |  2000-02-06  |  3KB  |  132 lines

  1. /*
  2.     H"(SANYO PHS-J80)用MML変換
  3. */
  4.  
  5. #include    <stdio.h>
  6.  
  7. /*
  8. 入力されるプリプロセス例:
  9.  
  10. 一応、
  11.     On?fl 
  12.      |||+-音長('1','2','3','4','6','8',16='H')
  13.      ||+--#フラグ('+'or'0'なし)
  14.      |+---音名('C','D','E','F','G','A','B'or'R')
  15.      +----オクターブ('3','4','5')
  16. が保証
  17. */
  18.  
  19.  
  20. int    CMSCC_conv23_HDGE_J80(src,dest,err)
  21. unsigned char    *src,*dest,*err;
  22. {
  23.     unsigned char    *s,*d,*e;
  24.     unsigned char    oct,    //オクターブ
  25.             name,    //音名
  26.             sharp,    //#
  27.             len;    //音長
  28.     unsigned char    skip,    //スキップコード
  29.             p;    //実際に押すボタン
  30.     short        times,tn;    //ボタンを押す回数
  31.  
  32.     s=src;
  33.     d=dest;    *d=NULL;
  34.     e=err;
  35.  
  36.     while( *s ){
  37.         /*    読み込み
  38.         */
  39.         skip=0;
  40.         switch( *s ){
  41.             case 'O':
  42.                 s++;
  43.                 oct=*s++;
  44.                 name=*s++;
  45.                 sharp=*s++;
  46.                 len=*s++;
  47.             break;
  48.             case ' ': case 0x0d: case 0x0a: case '\t':
  49.                 skip=*s++;
  50.             break;
  51.         }
  52.         
  53.         /*    書きだし
  54.         */
  55.         if( skip==0 ){
  56.             times=0;
  57.             switch(name){
  58.                 case 'C': p='1'; switch(oct){
  59.                     case '4':    times=(sharp=='+')?2:1;    break;
  60.                     case '5':    times=(sharp=='+')?4:3;    break;
  61.                 }break;
  62.                 case 'D': p='2'; switch(oct){
  63.                     case '3':    times=(sharp=='+')?4:3;    break;
  64.                     case '4':    times=(sharp=='+')?2:1;    break;
  65.                     case '5':    times=(sharp=='+')?6:5;    break;
  66.                 }break;
  67.                 case 'E': p='3'; switch(oct){
  68.                     case '3':    times=2;    break;
  69.                     case '4':    times=1;    break;
  70.                     case '5':    times=3;    break;
  71.                 }break;
  72.                 case 'F': p='4'; switch(oct){
  73.                     case '3':    times=(sharp=='+')?4:3;    break;
  74.                     case '4':    times=(sharp=='+')?2:1;    break;
  75.                     case '5':    times=(sharp=='+')?6:5;    break;
  76.                 }break;
  77.                 case 'G': p='5'; switch(oct){
  78.                     case '3':    times=(sharp=='+')?4:3;    break;
  79.                     case '4':    times=(sharp=='+')?2:1;    break;
  80.                     case '5':    times=(sharp=='+')?6:5;    break;
  81.                 }break;
  82.                 case 'A': p='6'; switch(oct){
  83.                     case '3':    times=(sharp=='+')?4:3;    break;
  84.                     case '4':    times=(sharp=='+')?2:1;    break;
  85.                     case '5':    times=(sharp=='+')?6:5;    break;
  86.                 }break;
  87.                 case 'B': p='7'; switch(oct){
  88.                     case '3':    times=2;    break;
  89.                     case '4':    times=1;    break;
  90.                     case '5':    times=3;    break;
  91.                 }break;
  92.                 
  93.                 case 'R':
  94.                     p='0';
  95.                     times=1;
  96.                 break;
  97.                 
  98.             }
  99.             if( times ){
  100.                 for( tn=0; tn<times; tn++ ){
  101.                     *d++=p;
  102.                 }
  103.             }
  104.             
  105.             switch(len){
  106.                 case '4':    break;    //デフォルト
  107.                 case '8':    p='*';    *d++=p;            break;
  108.                 case 'H':    p='*';    *d++=p;*d++=p;        break;
  109.                 case '2':    p='#';    *d++=p;            break;
  110.                 case '1':    p='#';    *d++=p;*d++=p;        break;
  111.                 case '3':    p='9';    *d++=p;            break;
  112.                 
  113.                 case '6':
  114.                         p='9';    *d++=p;
  115.                         p='*';    *d++=p;
  116.                 break;
  117.             }
  118.             *d++='>';    //次の文字へマーク
  119.         }
  120.         else{
  121.             //*d++=skip;
  122.         }
  123.     }
  124.     *d++=NULL;
  125.     
  126. }
  127.  
  128.  
  129.  
  130.  
  131.  
  132.